//=============================================================================

#include "../../../../inc/aPacketAddMage.h"

//=============================================================================

aPacketAddMage::aPacketAddMage() : aPacket()
{
  type = PAK_ADD_MAGE;
  mageType = 0;
  pos[0] = 0.0f;
  pos[1] = 0.0f;
  pos[2] = 0.0f;
}

//=============================================================================

aPacketAddMage::aPacketAddMage(char* in = 0) : aPacket(in)
{
  apApartPacket();
}

//=============================================================================

aPacketAddMage::aPacketAddMage(const aPacketAddMage& p) : aPacket(p)
{
  //apChewPacket(p.apGetData());
  apApartPacket();
}

//=============================================================================

void aPacketAddMage::apApartPacket()
{
  if (!data)
    return;

  size_t step = 1 + longSize;

  memcpy(&mageType, &data[step], charSize);
  step += charSize;

  memcpy(pos, &data[step], floatSize*3);
}

//=============================================================================

void aPacketAddMage::apPreparePacket()
{
  apClearPacket();

  size_t step = 0;

  length = 1 + longSize + charSize + 3*floatSize;
  type = PAK_ADD_MAGE;
  data = new char[length + 1];
  data[step] = type;
  step++;

  memcpy(&data[step], &length, longSize);
  step += longSize;

  memcpy(&data[step], &mageType, charSize);
  step += charSize;

  memcpy(&data[step], pos, floatSize*3);
  step += floatSize;

  data[length] = 0;
}

//=============================================================================

const aPacketAddMage& aPacketAddMage::operator=(const aPacketAddMage& p)
{
  apClearPacket();

  mageType = p.type;
  pos[0] = p.pos[0];
  pos[1] = p.pos[1];
  pos[2] = p.pos[2];

  if (p.apGetLength() <= 0)
    return (*this);

  length = p.apGetLength();
  data = new char[length];
  memcpy(data, p.apGetData(), length);
  type = p.apGetType();

  return (*this);
}

//=============================================================================

aPacketAddMage::~aPacketAddMage()
{
  apClearPacket();
}

//=============================================================================
